package array

// 利用辅助矩阵。开始觉得这样有点钻牛角尖，但仔细想想确实采用了原地方法
func rotate1(matrix [][]int) {

	n := len(matrix)

	matrix2 := make([][]int, n)
	for i := 0; i < n; i++ {
		matrix2[i] = make([]int, n)
	}

	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			matrix2[j][n-1-i] = matrix[i][j]
		}
	}

	copy(matrix, matrix2)

}

// 先上下互换，在斜对角互换
func rotate2(matrix [][]int) {
	n := len(matrix)

	half_n := int(n / 2)

	for i := 0; i < half_n; i++ {
		// for j := 0; j < n; j++ {
		// 	matrix[i][j], matrix[n-1-i][j] = matrix[n-i-i][j], matrix[i][j]
		// }

		matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i]
	}

	for i := 0; i < n; i++ {
		// j<i 而不是 j<n, 否则会互换两次
		for j := 0; j < n; j++ {
			matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
		}
	}

}
